Gepland MQTT-besturing
De Geplande MQTT-besturing is bedoeld voor geplande berichten van tevoren. Voor live besturing, zie in plaats daarvan Live MQTT Control.
Deze handleiding helpt u bij het configureren van MQTT op uw SmartgridOne Controller om op afstand batterij- en zonnepaneleninstallaties te controleren en te monitoren.
Wat u nodig heeft
- SmartgridOne Controller met internetconnectiviteit.
- MQTT-inloggegevens: Dit kan worden aangevraagd door een e-mail te sturen naar support@eniris.be.
- Python-ontwikkelomgeving (of een andere MQTT-client). Deze handleiding gebruikt een basisvoorbeeld geschreven in Python om u op weg te helpen met MQTT en het verzenden van opdrachten. We raden aan om Python te gebruiken vanwege het gebruiksgemak, maar elke andere MQTT-client wordt ondersteund.
Extra informatie
MQTT is een snel communicatieprotocol via internet. Het is een publicatie/abonnement berichtensysteem, dat een directe verbinding tussen uw machine en de SmartgridOne Controller mogelijk maakt. Uw activa zijn ingedeeld in groepen zonne-energie, batterij, EV en HVAC. Op dit moment staat deze integratie controle per groep toe, niet per apparaat.
Eerste configuratie (Beginpunt voor nieuwe gebruikers)
Ik heb een SmartgridOne Controller die ik wil instellen voor MQTT Remote Control.
1. Controleer uw netwerk
Zorg ervoor dat uw netwerk mqtt-netwerkverkeer via poort 1883 toestaat. U kunt dit doen met het commando:
nc -zv mqtt.eniris.be 1883
Wanneer dit commando niet beschikbaar is, kunt u alternatieve deze python-code downloaden en uitvoeren.
Bij twijfel kunt u uw netwerkingenieur raadplegen of tijdelijk de 4G/5G-hotspot van uw telefoon gebruiken wanneer er verbindingsfouten optreden.
Wanneer poort 1883 niet toegankelijk is vanuit uw netwerk, bieden we een back-up op poort 80. Dit kan in een later stadium van deze handleiding in uw MQTT-client worden geconfigureerd.
2. Voeg uw apparaten toe
Log in op de inbedrijfstellingsinterface en zorg ervoor dat de apparaten zijn toegevoegd aan de SmartgridOne Controller.
3. Voeg het MQTT externe signaal toe



4. Schakel het MQTT externe signaal in
Selecteer alle apparaten die u wilt opnemen in de MQTT Remote Control.

5. Het externe signaal is toegevoegd
De MQTT Remote Control-interface is nu geactiveerd op de SmartgridOne Controller.
We zijn nu klaar om enkele basisopdrachten te verzenden met een eenvoudig voorbeeld. De Status-kolom geeft aan of er een opdracht actief is.
Python demo script
Een goed eerste startpunt zou zijn om uw nieuw ingestelde integratie te testen met een eenvoudig voorbeeld.
Deze testcode voert een eenvoudige taak uit door continu de volgende planning te verzenden:
- Batterij: Laad op met 5 kW gedurende 15 minuten in 10 minuten
- Zonne-energie: Stel vermogen in op 0 kW gedurende een uur in 30 minuten
De SmartgridOne Controller reageert met een bevestigingsbericht met de unieke schema-identificator, of een foutbericht.
We halen vervolgens het volgende schema op voor beide apparaten, waarmee we bevestigen dat de opdracht succesvol was.
Download het onderstaande bestand in uw voorkeurs Python IDE. Vul uw serienummer en MQTT-gegevens in en voer het script uit:
Als het bovenstaande succesvol is, kunt u doorgaan met het verzenden van andere soorten berichten. Alle berichten worden hieronder beschreven.
MQTT-documentatie voor het verzenden van opdrachten
Dit gedeelte bevat details over het MQTT-berichtformaat en de payloadvereisten voor het opzetten van geplande controle van apparaten binnen het netwerk van de SmartgridOne Controller.
MQTT-onderwerpen
- Abonneer op onderwerp:
standard1/rp_one_s/remoteScheduleMetrics/<controller SN>
- Feedbackonderwerp:
standard1/outbound/remoteScheduleMetrics/feedback/<controller SN>
Waarbij <controller SN>
moet worden vervangen door het werkelijke serienummer van de SmartgridOne Controller die u wilt besturen.
MQTT-berichttypes
1. Schema instellen (set_schedule
)
Maakt een nieuw schema voor een apparaattype.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optioneel),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"remove_overlap": <True/False> (Optioneel) (default=False),
"tag": <Tag String> (Optioneel) (default=None)
}
}
Response (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedule_ack",
"state": {
"schedule_id": <Schedule ID>,
"deleted_ids": <Schedulde IDs deleted if remove_overlap=True>,
"tag": <Tag String> (default=None)
},
"responseCode": 0
}
}
2. Schema's instellen (set_schedules
)
Maakt meerdere nieuwe schema's aan.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedules",
"fields":
"0": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optioneel),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"remove_overlap": <True/False> (Optioneel) (default=False)
},
"1": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optioneel),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"remove_overlap": <True/False> (Optioneel) (default=False)
},
...
}
Response (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedules_ack",
"state": {
"schedule_ids": <Schedule IDs>,
"deleted_ids": <Schedulde IDs deleted if remove_overlap=True>
},
"responseCode": 0
}
}
3. Schema ophalen (get_schedule
)
Haalt een specifiek schema op op basis van ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedule",
"fields": {
"id": <Schedule ID>
}
}
Response:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedule_ack",
"state": <Schema>,
"responseCode": 0
}
}
4. Huidig actief schema ophalen (get_active_schedule
)
Haalt het momenteel actieve schema op voor een apparaattype.
{
"extraTags": {
```json
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_active_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optioneel),
}
}
Response (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_active_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}
5. Haal Volgende Schema Op (get_next_schedule
)
Haal het volgende geplande schema op voor een apparaattype.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_next_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optioneel),
}
}
Response (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_next_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}
6. Haal Schema's Op (get_schedules
)
Haal alle schema's op voor een specifieke datum.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedules",
"fields": {
"date": "<Date String of Format dd/mm/yyyy>"
}
}
Response (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}
7. Haal Toekomstige Schema's Op (get_future_schedules
)
Haal alle toekomstige schema's op.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_future_schedules",
"fields": {}
}
Response (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_future_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}
8. Verwijder Schema (remove_schedule
)
Verwijder een specifiek schema op basis van ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "remove_schedule",
"fields": {
"id": <Schedule ID>
}
}
Response (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "remove_schedule_ack",
"state": "Schema <Schedule ID> succesvol verwijderd",
"responseCode": 0
}
}
9. Haal Site Feedback Op (get_feedback
)
Haal gedetailleerde feedback op over de status van het systeem.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_feedback",
"fields": {
"device": <Device (node) level>
}
}
Response (Succes):
10. Site Topologie (get_toplogy
)
Haal de topologie van de site op.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_topology",
"fields": {}
}
Response (Succes):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_topology_ack",
"state": {
"nodeId": <nodeId>,
"nodeType": <nodeType>,
"children": [{<ChildObject>}]
},
"responseCode": 0
}
}
Standaard Antwoordformaat Schema
{
"id": <Schedule ID>,
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optioneel),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Schedule Policy>",
"power_setpoint_w": <Setpoint in watts>,
"created_at": <Unix Timestamp>
}
Componenttypen en Beleid
Voor details over beschikbare componenten en beleid die kunnen worden ingepland, verwijzen we naar de sectie MQTT Componenten en Beleid in de Live MQTT Control-documentatie.
Specifieke schema's voor apparaten kunnen worden verzonden met behulp van het optionele node_id
veld, verwijzend naar de node ID van het regelbare apparaat.
Foutafhandeling
Alle berichten kunnen een foutreactie retourneren met responseCode: 1
wanneer er een fout optreedt:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "<Message Type>_ack",
"error": <Error Body>,
"responseCode": 1
}
}
Wanneer er een niet-gerelateerde fout optreedt, zal het berichttype zijn (general_error
).
Veelvoorkomende fouten zijn:
- Schema-overlap met bestaande schema's
- Ongeldig tijdsinterval
- Apparaat type niet gevonden
- Schema ID niet gevonden
- Ongeldig beleid voor apparaattype
Schema Beheerregels
- Overlapregels
- Schema's kunnen niet overlappen voor hetzelfde apparaattype
- Schema's kunnen niet overlappen voor hetzelfde apparaat
- Schema's voor hetzelfde apparaat en apparaattype kunnen niet overlappen
- Bestaande, overlappende schema's zullen worden verwijderd als de variabele
remove_overlap
is ingesteld opTrue
bij het aanmaken van een nieuw schema.
- Elk schema moet hebben:
- Een geldig apparaattype
- Een starttijd (Unix-timestamp)
- Een eindtijd (Unix-timestamp)
- Een beleid (dat overeenkomt met de beschikbare beleid van het apparaattype)
- Een vermogen setpoint (voor beleid dat dit vereist)
- De starttijd moet vóór de eindtijd zijn
- Als de starttijd in het verleden ligt, wordt deze automatisch aangepast om nu te beginnen
- Schema's kunnen alleen worden verwijderd als ze nog niet zijn gestart. Actieve schema's kunnen niet worden verwijderd.
- Schema's kunnen onafhankelijk worden ingesteld voor verschillende apparaattype
- Het systeem past automatisch het juiste beleid toe wanneer een schema actief wordt